package com.zbkj.dal.base.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;
import org.apache.commons.lang3.StringUtils;

@AllArgsConstructor
public enum BizSharedOrderStatus {

    /**
     * 供享订单状态
     * <p>
     */

    // 待初评
    PENDING_ASSESSMENT("待初评", "用户已经填写完成了供享订单，等待贝贝奢护初评", ""),
    // 待寄送
    PENDING_SHIPMENT("待寄送", "贝贝奢护已经给出初评结果，等待用户寄送", "请于 %s 前确认初评结果"),
    // 待估价
    PENDING_VALUATION("待估价", "用户确认初评结果，并且已经预约(快递/上门)估价", "已于 %s 确认初评结果并预约寄送"),
    // 估价中
    VALUATION("估价中", "贝贝奢护已经收到货物了，并且正在估价中", "订单于 %s 送达贝贝奢护"),
    // 待确认
    PENDING_VALUATION_CONFIRMATION("待确认", "贝贝奢护最终估价已经出，等待用户确认", "请于 %s 前确认估价"),
    // 退回中
    BEING_RETURNED("退回中", "用户不认 （初评/估价）结果，并且取消供享", "您的奢品正在退回途中，请注意签收"),
    // 已关闭
    CANCELLED("已关闭", "用户上门估价之后取消供享 || 初评之后取消供享", ""),
    // 已退回
    RETURNED("已退回", "退回的货物已经签收", "您的退回奢品已于 %s 被签收"),
    // 已完成
    COMPLETED("已完成", "供享已经完成", ""),
    ;

    @Getter
    private final String text;
    private final String note;
    @Getter
    private final String template;


    public static String text(String name) {
        for (BizSharedOrderStatus value : BizSharedOrderStatus.values()) {
            if (StringUtils.equals(value.name(), name)) {
                return value.text;
            }
        }
        return StringUtils.EMPTY;
    }

    public static String remark(String name) {
        for (BizSharedOrderStatus value : BizSharedOrderStatus.values()) {
            if (StringUtils.equals(value.name(), name)) {
                return value.template;
            }
        }
        return StringUtils.EMPTY;
    }


    @AllArgsConstructor
    public enum SubStatus {
        /**
         * 供享订单状态 - 子状态
         * <p>
         */

        // ------------------- 待估价 子状态 -------------------

        // 物流待收货
        PENDING_EXPRESS_DELIVERY("物流待收货", "用户已经使用快递方式寄出，等待商品到店", PENDING_VALUATION),
        EXPRESS_TRANSPORTATION("物流运输中", "用户已经使用快递方式寄出，等待商品到店", PENDING_VALUATION),
        ASSESSMENT_EXPRESS_SIGN("物流已签收", "用户已经使用快递方式寄出，贝贝奢护已经签收物流", PENDING_VALUATION),


        // 等待用户上门
        WAITING_USER_PICKUP("等待用户上门", "用户已经选择上门方式估价", PENDING_VALUATION),

        // ------------------- 已关闭 子状态 -------------------

        // 用户初评取消
        CANCELLED_ASSESSMENT("用户初评取消", "用户不认初评的结果，取消供享订单", CANCELLED),
        // 用户上门估价之后取消
        CANCELLED_USER_PICKUP("用户上门估价之后取消", "用户上门之后不认估价结果，取消供享订单，此时商品是自己带走", CANCELLED),
        // 管理员取消
        CANCELLED_ADMIN("管理员取消", "用户上门之后不认估价，小程序不再操作", CANCELLED),

        // -------------待确认 子状态-------
        // 估价作废
        VALUATION_CONFIRMATION_CANCEL("估价作废", "用户在待确认状态，倒计时内未确认估价", PENDING_VALUATION_CONFIRMATION),

        // ------------退回中 子状态-------------
        // 验货不通过
//        VALUATION_FAIL("验货不通过", "贝贝奢护估价验货后评估不通过", BEING_RETURNED),
        // 用户不同意估价 到店自提
        RETURNED_PICKUP("到店自提", "用户不同意估价，取消供享 到店自提", BEING_RETURNED),
        // 退回中 物流预约状态 - 未取货状态
        RETURNED_EXPRESS("待物流揽收", "取消供享 快递寄回 待揽收", BEING_RETURNED),
        // 用户不同意估价快递运输中
        RETURNED_EXPRESS_TRANSPORTATION("运输中", "取消供享 快递寄回 运输中", BEING_RETURNED),
        // 退回已经签收，但是用户还未确认收货
        RETURNED_EXPRESS_SIGN("已经签收", "取消供享 快递寄回 已经签收", BEING_RETURNED),
        // 用户不同意估价快递退回确认收货
        RETURNED_EXPRESS_CONFIRM("退回确认收货", "取消供享，快递寄回 快递退回确认收货", BEING_RETURNED),

        ;;

        @Getter
        private final String text;
        private final String note;
        private final BizSharedOrderStatus parent;


        public static String text(String name) {
            for (BizSharedOrderStatus value : BizSharedOrderStatus.values()) {
                if (StringUtils.equals(value.name(), name)) {
                    return value.text;
                }
            }
            return StringUtils.EMPTY;
        }

    }
}
